home *** CD-ROM | disk | FTP | other *** search
- SAS AMIGA 680x0OBJ Module Disassembler 6.57
- Copyright © 1995 SAS Institute, Inc.
-
-
- Amiga Object File Loader V1.00
- 68000 Instruction Set
-
- EXTERNAL DEFINITIONS
-
- __chkabort 0000-00 _CreatePPCTask 002A-00 ___libfpinit 0160-00
- ___libfpterm 018A-00 __LibInit 01B4-00 __LibOpen 0346-00
- __LibClose 04BA-00 __LibExpunge 053C-00 __OSERR 0068-01
- ___base 006C-01 __StackPtr 0070-01 ___stack 0074-01 __ONEXIT 0078-01
- __WBenchMsg 007C-01 _WBenchMsg 0080-01 __LibInitTab 0000-02
-
- SECTION 00 "text" 000005EC BYTES
- ; 1: #define _USEOLDEXEC_ 1
- ; 2: #include <exec/types.h>
- ; 3: #include <exec/nodes.h>
- ; 4: #include <exec/memory.h>
- ; 5: #include <exec/resident.h>
- ; 6: #include <exec/libraries.h>
- ; 7: #include <exec/execbase.h>
- ; 8: #include <libraries/dos.h>
- ; 9: #include <proto/exec.h>
- ; 10: #include <proto/dos.h>
- ; 11: #include <string.h>
- ; 12: #include <dos/dostags.h>
- ; 13: #include <PowerUP/PPCLib/Interface.h>
- ; 14: #include <PowerUP/PPCLib/tasks.h>
- ; 15: #include <PowerUP/PPCLib/ppc.h>
- ; 16: #include <PowerUP/PPCLib/object.h>
- ; 17: #include <PowerUP/PPCDisslib/PPCDiss.h>
- ; 18: #include <PowerUP/pragmas/ppc_pragmas.h>
- ; 19: #include <PowerUP/clib/ppc_protos.h>
- ; 20: #include <PowerUP/pragmas/ppcdiss_pragmas.h>
- ; 21: #include <PowerUP/clib/ppcdiss_protos.h>
- ; 22:
- ; 23:
- ; 24: /* Prototypes */
- ; 25: ULONG __asm _LibExpunge( register __a6 struct MyLibrary *libbase );
- ; 26: ULONG __asm _LibInit ( register __a0 APTR seglist,
- ; 27: register __d0 struct MyLibrary *libbase );
- ; 28:
- ; 29: int __saveds __asm __UserLibInit (register __a6 struct MyLibrary *libbase);
- ; 30: void __saveds __asm __UserLibCleanup(register __a6 struct MyLibrary *libbase);
- ; 31:
- ; 32: int __saveds __asm __UserDevInit (register __d0 long unit,
- ; 33: register __a0 struct IORequest *ior,
- ; 34: register __a6 struct MyLibrary *libbase);
- ; 35: void __saveds __asm __UserDevCleanup(register __a0 struct IORequest *ior,
- ; 36: register __a6 struct MyLibrary *libbase);
- ; 37:
- ; 38: int __saveds __asm __libfpinit (register __a6 struct MyLibrary *libbase);
- ; 39: void __saveds __asm __libfpterm (register __a6 struct MyLibrary *libbase);
- ; 40: void __saveds __asm Set_ElfEntry (register __a6 struct MyLibrary *libbase,
- ; 41: register __d0 long value);
- ; 42:
- ; 43: struct MyLibrary {
- ; 44: struct Library ml_Lib;
- ; 45: ULONG ml_SegList;
- ; 46: ULONG ml_Flags;
- ; 47: APTR ml_ExecBase; /* pointer to exec base */
- ; 48: #ifndef ONE_GLOBAL_SECTION
- ; 49: long * ml_relocs; /* pointer to relocs. */
- ; 50: struct MyLibrary * ml_origbase; /* pointer to original library base */
- ; 51: long ml_numjmps;
- ; 52: #endif
- ; 53: void * ml_MyObject; /* pointer to ELF Object */
- ; 54:
- ; 55: };
- ; 56:
- ; 57: typedef LONG (*myPFL)(); /* pointer to function returning 32-bit int */
- ; 58:
- ; 59: /* library initialization table, used for AUTOINIT libraries */
- ; 60: struct InitTable {
- ; 61: ULONG *it_DataSize; /* library data space size */
- ; 62: myPFL *it_FuncTable; /* table of entry points */
- ; 63: APTR it_DataInit; /* table of data initializers */
- ; 64: myPFL it_InitFunc; /* initialization function to run */
- ; 65: };
- ; 66:
- ; 67: #ifndef ONE_GLOBAL_SECTION
- ; 68: long _OSERR;
- ; 69: long __base;
- ; 70: #endif
- ; 71:
- ; 72: /* symbols generated by blink */
- ; 73: extern char __far _LibID[]; /* ID string */
- ; 74: extern char __far _LibName[]; /* Name string */
- ; 75: extern char __far RESLEN; /* size of init data */
- ; 76: extern long __far NEWDATAL; /* size of global data */
- ; 77: extern long __far NUMJMPS; /* number of jmp vectors to copy */
- ; 78: extern myPFL _LibFuncTab[]; /* my function table */
- ; 79: extern long __far _LibVersion; /* Version of library */
- ; 80: extern long __far _LibRevision; /* Revision of library */
- ; 81:
- ; 82: long _StackPtr;
- ; 83: long __stack;
- ; 84: long __base;
- ; 85: long _ONEXIT;
- ; 86: struct WBStartup *_WBenchMsg;
- ; 87: struct WBStartup *WBenchMsg;
- ; 88:
- ; 89:
- ; 90: #define MYVERSION ((long)&_LibVersion)
- ; 91: #define MYREVISION ((long)&_LibRevision)
- ; 92: #define DATAWORDS ((long)&NEWDATAL) /* magic to get right tpye of reloc */
- ; 93: #define SIZEJMPTAB ((long)libbase->ml_origbase->ml_numjmps)
- ; 94: /* size in bytes of jmp table */
- ; 95:
- ; 96: /* From libent.o, needed to determine where data is loaded by loadseg */
- ; 97: extern long far _Libmergeddata;
- ; 98:
- ; 99: #define MYLIBRARYSIZE ((sizeof(struct MyLibrary) +3) & ~3)
- ; 100:
- ; 101:
- ; 102:
- ; 103: struct InitTable __far _LibInitTab = {
- ; 104: (long *)(&RESLEN+MYLIBRARYSIZE),
- ; 105: _LibFuncTab,
- ; 106: NULL, /* will initialize my own data */
- ; 107: _LibInit,
- ; 108: };
- ; 109:
- ; 110:
- ; 111: int _chkabort(void)
- | 0000 594F SUBQ.W #4,A7
- | 0002 2E8E MOVE.L A6,(A7)
- ; 112: {
- ; 113: return 0;
- | 0004 7000 MOVEQ #00,D0
- ; 114: }
- | 0006 584F ADDQ.W #4,A7
- | 0008 4E75 RTS
- | 000A 646F BCC.B 007B
- | 000C 732E
- | 000E 6C69 BGE.B 0079
- | 0010 6272 BHI.B 0084
- | 0012 6172 BSR.B 0086
- | 0014 7900
- | 0016 7070 MOVEQ #70,D0
- | 0018 632E BLS.B 0048
- | 001A 6C69 BGE.B 0085
- | 001C 6272 BHI.B 0090
- | 001E 6172 BSR.B 0092
- | 0020 7900
- | 0022 5F5F SUBQ.W #7,(A7)+
- | 0024 456E
- | 0026 7472 MOVEQ #72,D2
- | 0028 7900
- ; 115:
- ; 116:
- ; 117:
- ; 118:
- ; 119: int CreatePPCTask(struct MyLibrary *libbase, void *entry)
- | 002A 514F SUBQ.W #8,A7
- | 002C 48E7 0136 MOVEM.L D7/A2-A3/A5-A6,-(A7)
- | 0030 266F 0024 MOVEA.L 0024(A7),A3
- | 0034 2A6F 0020 MOVEA.L 0020(A7),A5
- | 0038 2F4E 0014 MOVE.L A6,0014(A7)
- ; 120: {
- ; 121: static struct TagItem MyTags[13];
- ; 122: struct DOSLibrary *DOSBase;
- ; 123: struct Library *PPCLibBase;
- ; 124: long result;
- ; 125:
- ; 126: DOSBase = (void *)OpenLibrary("dos.library", 0);
- | 003C 43FA FFCC LEA FFCC(PC),A1
- | 0040 7000 MOVEQ #00,D0
- | 0042 2C78 0004 MOVEA.L 0004,A6
- | 0046 4EAE FDD8 JSR FDD8(A6)
- | 004A 2440 MOVEA.L D0,A2
- ; 127: if (DOSBase == NULL) return -1;
- | 004C 200A MOVE.L A2,D0
- | 004E 2C6F 0014 MOVEA.L 0014(A7),A6
- | 0052 6606 BNE.B 005A
- | 0054 70FF MOVEQ #FF,D0
- | 0056 6000 0100 BRA.W 0158
- ; 128:
- ; 129: if ((PPCLibBase = OpenLibrary("ppc.library",0)) == NULL)
- | 005A 43FA FFBA LEA FFBA(PC),A1
- | 005E 7000 MOVEQ #00,D0
- | 0060 2C78 0004 MOVEA.L 0004,A6
- | 0064 4EAE FDD8 JSR FDD8(A6)
- | 0068 2F40 0018 MOVE.L D0,0018(A7)
- | 006C 4A80 TST.L D0
- | 006E 2C6F 0014 MOVEA.L 0014(A7),A6
- | 0072 6610 BNE.B 0084
- ; 130: {
- ; 131: CloseLibrary((void *)DOSBase);
- | 0074 224A MOVEA.L A2,A1
- | 0076 2C78 0004 MOVEA.L 0004,A6
- | 007A 4EAE FE62 JSR FE62(A6)
- ; 132: return -1;
- | 007E 70FF MOVEQ #FF,D0
- | 0080 6000 00D6 BRA.W 0158
- ; 133: }
- ; 134:
- ; 135: MyTags[0].ti_Tag = PPCTASKTAG_STOPTASK;
- | 0084 297C 8002 0012 0000-01.2 MOVE.L #80020012,01.00000000(A4)
- ; 136: MyTags[0].ti_Data = FALSE;
- | 008C 42AC 0004-01.2 CLR.L 01.00000004(A4)
- ; 137: MyTags[1].ti_Tag = PPCTASKTAG_WAITFINISH;
- | 0090 297C 8002 0031 0008-01.2 MOVE.L #80020031,01.00000008(A4)
- ; 138: MyTags[1].ti_Data = TRUE;
- | 0098 7001 MOVEQ #01,D0
- | 009A 2940 000C-01.2 MOVE.L D0,01.0000000C(A4)
- ; 139: MyTags[2].ti_Tag = PPCTASKTAG_INPUTHANDLE;
- | 009E 297C 8002 000F 0010-01.2 MOVE.L #8002000F,01.00000010(A4)
- ; 140: MyTags[2].ti_Data = (ULONG) Input();
- | 00A6 2C4A MOVEA.L A2,A6
- | 00A8 4EAE FFCA JSR FFCA(A6)
- | 00AC 2940 0014-01.2 MOVE.L D0,01.00000014(A4)
- ; 141: MyTags[3].ti_Tag = PPCTASKTAG_OUTPUTHANDLE;
- | 00B0 297C 8002 0010 0018-01.2 MOVE.L #80020010,01.00000018(A4)
- ; 142: MyTags[3].ti_Data = (ULONG) Output();
- | 00B8 2C4A MOVEA.L A2,A6
- | 00BA 4EAE FFC4 JSR FFC4(A6)
- | 00BE 2940 001C-01.2 MOVE.L D0,01.0000001C(A4)
- ; 143: MyTags[4].ti_Tag = PPCTASKTAG_ARG1;
- | 00C2 297C 8002 0003 0020-01.2 MOVE.L #80020003,01.00000020(A4)
- ; 144: MyTags[4].ti_Data = (ULONG) 0;
- | 00CA 42AC 0024-01.2 CLR.L 01.00000024(A4)
- ; 145: MyTags[5].ti_Tag = PPCTASKTAG_STACKSIZE;
- | 00CE 297C 8002 000D 0028-01.2 MOVE.L #8002000D,01.00000028(A4)
- ; 146: MyTags[5].ti_Data = 0x10000;
- | 00D6 297C 0001 0000 002C-01.2 MOVE.L #00010000,01.0000002C(A4)
- ; 147: MyTags[6].ti_Tag = NP_CloseInput;
- | 00DE 297C 8000 03EE 0030-01.2 MOVE.L #800003EE,01.00000030(A4)
- ; 148: MyTags[6].ti_Data = FALSE;
- | 00E6 42AC 0034-01.2 CLR.L 01.00000034(A4)
- ; 149: MyTags[7].ti_Tag = NP_CloseOutput;
- | 00EA 297C 8000 03EF 0038-01.2 MOVE.L #800003EF,01.00000038(A4)
- ; 150: MyTags[7].ti_Data = FALSE;
- | 00F2 42AC 003C-01.2 CLR.L 01.0000003C(A4)
- ; 151: MyTags[8].ti_Tag = PPCTASKTAG_BREAKSIGNAL;
- | 00F6 297C 8002 0019 0040-01.2 MOVE.L #80020019,01.00000040(A4)
- ; 152: MyTags[8].ti_Data = TRUE;
- | 00FE 7001 MOVEQ #01,D0
- | 0100 2940 0044-01.2 MOVE.L D0,01.00000044(A4)
- ; 153: MyTags[9].ti_Tag = PPCTASKTAG_ARG3;
- | 0104 297C 8002 0005 0048-01.2 MOVE.L #80020005,01.00000048(A4)
- ; 154: MyTags[9].ti_Data = (ULONG) libbase;
- | 010C 294D 004C-01.2 MOVE.L A5,01.0000004C(A4)
- ; 155: MyTags[10].ti_Tag = PPCTASKTAG_ARG4;
- | 0110 297C 8002 0006 0050-01.2 MOVE.L #80020006,01.00000050(A4)
- ; 156: MyTags[10].ti_Data = (ULONG) entry;
- | 0118 294B 0054-01.2 MOVE.L A3,01.00000054(A4)
- ; 157: MyTags[11].ti_Tag = PPCTASKTAG_ARG2;
- | 011C 297C 8002 0004 0058-01.2 MOVE.L #80020004,01.00000058(A4)
- ; 158: MyTags[11].ti_Data = (ULONG) _WBenchMsg;
- | 0124 296C 007C-01.2 005C-01.2 MOVE.L 01.0000007C(A4),01.0000005C(A4)
- ; 159:
- ; 160: MyTags[12].ti_Tag = TAG_END;
- | 012A 42AC 0060-01.2 CLR.L 01.00000060(A4)
- ; 161:
- ; 162: CloseLibrary((void *)DOSBase);
- | 012E 224A MOVEA.L A2,A1
- | 0130 2C78 0004 MOVEA.L 0004,A6
- | 0134 4EAE FE62 JSR FE62(A6)
- ; 163:
- ; 164: result = (ULONG) PPCCreateTask(libbase->ml_MyObject,
- ; 165: &MyTags[0]);
- | 0138 206D 003A MOVEA.L 003A(A5),A0
- | 013C 43EC 0000-01.2 LEA 01.00000000(A4),A1
- | 0140 2C6F 0018 MOVEA.L 0018(A7),A6
- | 0144 4EAE FFAC JSR FFAC(A6)
- | 0148 2E00 MOVE.L D0,D7
- ; 166:
- ; 167: CloseLibrary(PPCLibBase);
- | 014A 226F 0018 MOVEA.L 0018(A7),A1
- | 014E 2C78 0004 MOVEA.L 0004,A6
- | 0152 4EAE FE62 JSR FE62(A6)
- ; 168: return result;
- | 0156 2007 MOVE.L D7,D0
- ; 169:
- ; 170: }
- | 0158 4CDF 6C80 MOVEM.L (A7)+,D7/A2-A3/A5-A6
- | 015C 504F ADDQ.W #8,A7
- | 015E 4E75 RTS
- ; 171:
- ; 172: /* PPC functions that run the PPC autoinitializers */
- ; 173: extern int _fpinit(void);
- ; 174: extern int _fpterm(void);
- ; 175:
- ; 176: int __saveds __asm __libfpinit(register __a6 struct MyLibrary *libbase)
- | 0160 594F SUBQ.W #4,A7
- | 0162 48E7 000E MOVEM.L A4-A6,-(A7)
- | 0166 2A4E MOVEA.L A6,A5
- | 0168 49EE 0000-XX.2 LEA _LinkerDB(A6),A4
- | 016C 2F4E 000C MOVE.L A6,000C(A7)
- ; 177: {
- ; 178: return CreatePPCTask(libbase, _fpinit);
- | 0170 41FA 0000-XX.1 LEA __fpinit(PC),A0
- | 0174 2F08 MOVE.L A0,-(A7)
- | 0176 2F0D MOVE.L A5,-(A7)
- | 0178 2C6F 0014 MOVEA.L 0014(A7),A6
- | 017C 6100 FEAC BSR.W 002A
- | 0180 504F ADDQ.W #8,A7
- ; 179: }
- | 0182 4CDF 7000 MOVEM.L (A7)+,A4-A6
- | 0186 584F ADDQ.W #4,A7
- | 0188 4E75 RTS
- ; 180:
- ; 181: void __saveds __asm __libfpterm(register __a6 struct MyLibrary *libbase)
- | 018A 594F SUBQ.W #4,A7
- | 018C 48E7 000E MOVEM.L A4-A6,-(A7)
- | 0190 2A4E MOVEA.L A6,A5
- | 0192 49EE 0000-XX.2 LEA _LinkerDB(A6),A4
- | 0196 2F4E 000C MOVE.L A6,000C(A7)
- ; 182: {
- ; 183: CreatePPCTask(libbase, _fpterm);
- | 019A 41FA 0000-XX.1 LEA __fpterm(PC),A0
- | 019E 2F08 MOVE.L A0,-(A7)
- | 01A0 2F0D MOVE.L A5,-(A7)
- | 01A2 2C6F 0014 MOVEA.L 0014(A7),A6
- | 01A6 6100 FE82 BSR.W 002A
- | 01AA 504F ADDQ.W #8,A7
- ; 184: }
- | 01AC 4CDF 7000 MOVEM.L (A7)+,A4-A6
- | 01B0 584F ADDQ.W #4,A7
- | 01B2 4E75 RTS
- ; 185:
- ; 186:
- ; 187:
- ; 188:
- ; 189:
- ; 190:
- ; 191: __asm ULONG _LibInit( register __a0 APTR seglist,
- ; 192: register __d0 struct MyLibrary *libbase )
- | 01B4 9EFC 003C SUBA.W #003C,A7
- | 01B8 48E7 0136 MOVEM.L D7/A2-A3/A5-A6,-(A7)
- | 01BC 2640 MOVEA.L D0,A3
- | 01BE 2A48 MOVEA.L A0,A5
- | 01C0 2F4E 0014 MOVE.L A6,0014(A7)
- ; 193: {
- ; 194: #ifdef ONE_GLOBAL_SECTION
- ; 195: long *reloc;
- ; 196: #endif
- ; 197: long *sdata;
- ; 198: char *ddata;
- ; 199: long nrelocs;
- ; 200: struct TagItem MyTags[3];
- ; 201: extern __far long _ElfObject;
- ; 202: struct Library *PPCLibBase;
- ; 203:
- ; 204: libbase->ml_SegList = (ULONG) seglist;
- | 01C4 274D 0022 MOVE.L A5,0022(A3)
- ; 205:
- ; 206: /* init. library structure (since I don't do automatic data init.) */
- ; 207: #ifdef DEVICE
- ; 208: libbase->ml_Lib.lib_Node.ln_Type = NT_DEVICE;
- ; 209: #else
- ; 210: libbase->ml_Lib.lib_Node.ln_Type = NT_LIBRARY;
- | 01C8 177C 0009 0008 MOVE.B #09,0008(A3)
- ; 211: #endif
- ; 212: libbase->ml_Lib.lib_Node.ln_Name = _LibName;
- | 01CE 41F9 0000 0000-XX LEA __LibName,A0
- | 01D4 2748 000A MOVE.L A0,000A(A3)
- ; 213: libbase->ml_Lib.lib_Flags = LIBF_SUMUSED | LIBF_CHANGED;
- | 01D8 177C 0006 000E MOVE.B #06,000E(A3)
- ; 214: libbase->ml_Lib.lib_Version = MYVERSION;
- | 01DE 41F9 0000 0000-XX LEA __LibVersion,A0
- | 01E4 2008 MOVE.L A0,D0
- | 01E6 3740 0014 MOVE.W D0,0014(A3)
- ; 215: libbase->ml_Lib.lib_Revision = MYREVISION;
- | 01EA 41F9 0000 0000-XX LEA __LibRevision,A0
- | 01F0 2008 MOVE.L A0,D0
- | 01F2 3740 0016 MOVE.W D0,0016(A3)
- ; 216: libbase->ml_Lib.lib_IdString = (APTR) _LibID;
- | 01F6 277C 0000 0000-XX 0018 MOVE.L #__LibID,0018(A3)
- ; 217: #ifndef ONE_GLOBAL_SECTION
- ; 218: libbase->ml_relocs = NULL;
- | 01FE 42AB 002E CLR.L 002E(A3)
- ; 219: libbase->ml_origbase = libbase;
- | 0202 274B 0032 MOVE.L A3,0032(A3)
- ; 220: sdata = (long *)_LibInitTab.it_FuncTable;
- | 0206 2479 0000 0004-02 MOVEA.L 02.00000004,A2
- ; 221: libbase->ml_numjmps = (long)&NUMJMPS;
- | 020C 277C 0000 0000-XX 0036 MOVE.L #_NUMJMPS,0036(A3)
- ; 222: #endif
- ; 223:
- ; 224:
- ; 225: /* load the PPC ELF stub */
- ; 226: MyTags[0].ti_Tag = PPCELFLOADTAG_ELFADDRESS;
- | 0214 2F7C 8002 3301 0034 MOVE.L #80023301,0034(A7)
- ; 227: MyTags[0].ti_Data = (long)&_ElfObject;
- | 021C 2F7C 0000 0000-XX 0038 MOVE.L #__ElfObject,0038(A7)
- ; 228: MyTags[1].ti_Tag = PPCELFLOADTAG_ELFNAME;
- | 0224 2F7C 8002 3300 003C MOVE.L #80023300,003C(A7)
- ; 229: MyTags[1].ti_Data = (long)_LibName;
- | 022C 2F7C 0000 0000-XX 0040 MOVE.L #__LibName,0040(A7)
- ; 230: MyTags[2].ti_Tag = TAG_DONE;
- | 0234 42AF 0044 CLR.L 0044(A7)
- ; 231:
- ; 232:
- ; 233: if ((PPCLibBase = OpenLibrary("ppc.library",0)) == NULL)
- | 0238 43FA FDDC LEA FDDC(PC),A1
- | 023C 7000 MOVEQ #00,D0
- | 023E 2C78 0004 MOVEA.L 0004,A6
- | 0242 4EAE FDD8 JSR FDD8(A6)
- | 0246 2F40 0030 MOVE.L D0,0030(A7)
- | 024A 4A80 TST.L D0
- | 024C 2C6F 0014 MOVEA.L 0014(A7),A6
- | 0250 6606 BNE.B 0258
- ; 234: return NULL;
- | 0252 7000 MOVEQ #00,D0
- | 0254 6000 00E6 BRA.W 033C
- ; 235:
- ; 236: if (libbase->ml_MyObject=PPCLoadObjectTagList(MyTags))
- | 0258 41EF 0034 LEA 0034(A7),A0
- | 025C 2C6F 0030 MOVEA.L 0030(A7),A6
- | 0260 4EAE FE68 JSR FE68(A6)
- | 0264 2740 003A MOVE.L D0,003A(A3)
- | 0268 2C6F 0014 MOVEA.L 0014(A7),A6
- | 026C 4A80 TST.L D0
- | 026E 6738 BEQ.B 02A8
- ; 237: {
- ; 238: struct PPCObjectInfo MyInfo;
- ; 239:
- ; 240: MyInfo.Address = 0;
- | 0270 42AF 0018 CLR.L 0018(A7)
- ; 241: MyInfo.Name = "__Entry";
- | 0274 41FA FDAC LEA FDAC(PC),A0
- | 0278 2F48 001C MOVE.L A0,001C(A7)
- ; 242: MyTags[0].ti_Tag = TAG_END;
- | 027C 42AF 0034 CLR.L 0034(A7)
- ; 243:
- ; 244: PPCGetObjectAttrs(libbase->ml_MyObject,
- ; 245: &MyInfo,
- ; 246: MyTags);
- | 0280 2F0A MOVE.L A2,-(A7)
- | 0282 206B 003A MOVEA.L 003A(A3),A0
- | 0286 43EF 001C LEA 001C(A7),A1
- | 028A 2C6F 0034 MOVEA.L 0034(A7),A6
- | 028E 45EF 0038 LEA 0038(A7),A2
- | 0292 4EAE FF3A JSR FF3A(A6)
- | 0296 245F MOVEA.L (A7)+,A2
- ; 247: Set_ElfEntry(libbase, MyInfo.Address);
- | 0298 202F 0018 MOVE.L 0018(A7),D0
- | 029C 2C4B MOVEA.L A3,A6
- | 029E 6100 0000-XX.1 BSR.W _Set_ElfEntry
- | 02A2 2C6F 0014 MOVEA.L 0014(A7),A6
- | 02A6 6012 BRA.B 02BA
- ; 248:
- ; 249: }
- ; 250: else
- ; 251: {
- ; 252: CloseLibrary(PPCLibBase);
- | 02A8 226F 0030 MOVEA.L 0030(A7),A1
- | 02AC 2C78 0004 MOVEA.L 0004,A6
- | 02B0 4EAE FE62 JSR FE62(A6)
- ; 253: return NULL;
- | 02B4 7000 MOVEQ #00,D0
- | 02B6 6000 0084 BRA.W 033C
- ; 254: }
- ; 255: CloseLibrary(PPCLibBase);
- | 02BA 226F 0030 MOVEA.L 0030(A7),A1
- | 02BE 2C78 0004 MOVEA.L 0004,A6
- | 02C2 4EAE FE62 JSR FE62(A6)
- ; 256:
- ; 257:
- ; 258: /* Start of copy of global data after structure */
- ; 259: ddata = (char *)libbase + MYLIBRARYSIZE;
- | 02C6 41EB 0040 LEA 0040(A3),A0
- | 02CA 2F48 004C MOVE.L A0,004C(A7)
- ; 260:
- ; 261: sdata = (long *)&_Libmergeddata; /* where loadseg loaded the data */
- | 02CE 45F9 0000 0000-XX LEA __Libmergeddata,A2
- ; 262: memcpy(ddata, (void *)sdata, DATAWORDS*4);
- | 02D4 41F9 0000 0000-XX LEA _NEWDATAL,A0
- | 02DA 2008 MOVE.L A0,D0
- | 02DC 2200 MOVE.L D0,D1
- | 02DE E581 ASL.L #2,D1
- | 02E0 204A MOVEA.L A2,A0
- | 02E2 226F 004C MOVEA.L 004C(A7),A1
- | 02E6 6002 BRA.B 02EA
- | 02E8 12D8 MOVE.B (A0)+,(A1)+
- | 02EA 5381 SUBQ.L #1,D1
- | 02EC 64FA BCC.B 02E8
- ; 263:
- ; 264: /* perform relocs if we want one global section for all programs */
- ; 265: /* that have this lib open. If we want a global section for each */
- ; 266: /* open, copy the relocs, and do them on each open call. */
- ; 267: sdata = sdata + DATAWORDS;
- | 02EE 41F9 0000 0000-XX LEA _NEWDATAL,A0
- | 02F4 2008 MOVE.L A0,D0
- | 02F6 2200 MOVE.L D0,D1
- | 02F8 E581 ASL.L #2,D1
- | 02FA D5C1 ADDA.L D1,A2
- ; 268: nrelocs = *sdata;
- | 02FC 2E12 MOVE.L (A2),D7
- | 02FE 2C6F 0014 MOVEA.L 0014(A7),A6
- ; 269: #ifdef ONE_GLOBAL_SECTION
- ; 270: sdata++;
- ; 271: while (nrelocs > 0)
- ; 272: {
- ; 273: reloc = (long *)((long)ddata + *sdata++);
- ; 274: *reloc += (long)ddata;
- ; 275: nrelocs--;
- ; 276: }
- ; 277:
- ; 278:
- ; 279: #ifndef DEVICE
- ; 280: if (__UserLibInit(libbase) != 0)
- ; 281: return NULL; /* abort if user init failed */
- ; 282: #endif
- ; 283:
- ; 284: #else
- ; 285: if (nrelocs)
- | 0302 4A87 TST.L D7
- | 0304 6734 BEQ.B 033A
- ; 286: {
- ; 287: if ((libbase->ml_relocs = AllocMem((nrelocs * 4) + 4, MEMF_PUBLIC)) == NULL)
- | 0306 2007 MOVE.L D7,D0
- | 0308 E580 ASL.L #2,D0
- | 030A 5880 ADDQ.L #4,D0
- | 030C 7201 MOVEQ #01,D1
- | 030E 2C78 0004 MOVEA.L 0004,A6
- | 0312 4EAE FF3A JSR FF3A(A6)
- | 0316 2740 002E MOVE.L D0,002E(A3)
- | 031A 4A80 TST.L D0
- | 031C 2C6F 0014 MOVEA.L 0014(A7),A6
- | 0320 6604 BNE.B 0326
- ; 288: return 0;
- | 0322 7000 MOVEQ #00,D0
- | 0324 6016 BRA.B 033C
- ; 289: memcpy((void *)libbase->ml_relocs, (void *)sdata, (nrelocs * 4) + 4);
- | 0326 2007 MOVE.L D7,D0
- | 0328 E580 ASL.L #2,D0
- | 032A 5880 ADDQ.L #4,D0
- | 032C 204A MOVEA.L A2,A0
- | 032E 226B 002E MOVEA.L 002E(A3),A1
- | 0332 6002 BRA.B 0336
- | 0334 12D8 MOVE.B (A0)+,(A1)+
- | 0336 5380 SUBQ.L #1,D0
- | 0338 64FA BCC.B 0334
- ; 290: }
- ; 291: #endif
- ; 292:
- ; 293: return ( (ULONG) libbase );
- | 033A 200B MOVE.L A3,D0
- ; 294: }
- | 033C 4CDF 6C80 MOVEM.L (A7)+,D7/A2-A3/A5-A6
- | 0340 DEFC 003C ADDA.W #003C,A7
- | 0344 4E75 RTS
- ; 295:
- ; 296: LONG __asm _LibOpen(
- ; 297: #ifdef DEVICE
- ; 298: register __d0 long unit,
- ; 299: register __a1 struct IORequest *ior,
- ; 300: #endif
- ; 301: register __a6 struct MyLibrary *libbase )
- | 0346 9EFC 001C SUBA.W #001C,A7
- | 034A 48E7 0136 MOVEM.L D7/A2-A3/A5-A6,-(A7)
- | 034E 2A4E MOVEA.L A6,A5
- | 0350 2F4E 0018 MOVE.L A6,0018(A7)
- ; 302: {
- ; 303: #ifndef ONE_GLOBAL_SECTION
- ; 304: struct MyLibrary *origbase = libbase;
- | 0354 264D MOVEA.L A5,A3
- ; 305: struct ExecBase *SysBase = *(struct ExecBase **)4;
- | 0356 307C 0004 MOVEA.W #0004,A0
- | 035A 2450 MOVEA.L (A0),A2
- ; 306: char *newlib;
- ; 307: long *sdata, *ddata, *reloc;
- ; 308: long nrelocs;
- ; 309: #endif
- ; 310:
- ; 311:
- ; 312: char *a = 0;
- | 035C 42AF 001C CLR.L 001C(A7)
- ; 313: *a = 0;
- | 0360 206F 001C MOVEA.L 001C(A7),A0
- | 0364 4210 CLR.B (A0)
- ; 314:
- ; 315: /* mark us as having another customer */
- ; 316: libbase->ml_Lib.lib_OpenCnt++;
- | 0366 526D 0020 ADDQ.W #1,0020(A5)
- ; 317:
- ; 318: /* clear delayed expunges (standard procedure) */
- ; 319: libbase->ml_Lib.lib_Flags &= ~LIBF_DELEXP;
- | 036A 08AD 0003 000E BCLR #0003,000E(A5)
- ; 320:
- ; 321: #ifndef ONE_GLOBAL_SECTION
- ; 322: /* Allocate new lib base */
- ; 323: newlib = AllocMem((long)(MYLIBRARYSIZE +
- | 0370 41F9 0000 0000-XX LEA _RESLEN,A0
- | 0376 226D 0032 MOVEA.L 0032(A5),A1
- | 037A 2008 MOVE.L A0,D0
- | 037C D0A9 0036 ADD.L 0036(A1),D0
- | 0380 7240 MOVEQ #40,D1
- | 0382 D081 ADD.L D1,D0
- | 0384 2F40 0014 MOVE.L D0,0014(A7)
- ; 324: ((long)&RESLEN) + SIZEJMPTAB),
- ; 325: MEMF_PUBLIC|MEMF_CLEAR);
- | 0388 202F 0014 MOVE.L 0014(A7),D0
- | 038C 223C 0001 0001 MOVE.L #00010001,D1
- | 0392 2C78 0004 MOVEA.L 0004,A6
- | 0396 4EAE FF3A JSR FF3A(A6)
- | 039A 2F40 002C MOVE.L D0,002C(A7)
- ; 326:
- ; 327: if (newlib == NULL) goto error;
- | 039E 2C6F 0018 MOVEA.L 0018(A7),A6
- | 03A2 6608 BNE.B 03AC
- | 03A4 2C6F 0018 MOVEA.L 0018(A7),A6
- | 03A8 6000 00F2 BRA.W 049C
- ; 328:
- ; 329: /* copy over data */
- ; 330: memcpy(newlib, (char *)libbase - SIZEJMPTAB,
- ; 331: (long)(MYLIBRARYSIZE + DATAWORDS*4 + SIZEJMPTAB));
- | 03AC 206D 0032 MOVEA.L 0032(A5),A0
- | 03B0 224D MOVEA.L A5,A1
- | 03B2 93E8 0036 SUBA.L 0036(A0),A1
- | 03B6 4DF9 0000 0000-XX LEA _NEWDATAL,A6
- | 03BC 200E MOVE.L A6,D0
- | 03BE 2200 MOVE.L D0,D1
- | 03C0 E581 ASL.L #2,D1
- | 03C2 D2A8 0036 ADD.L 0036(A0),D1
- | 03C6 7040 MOVEQ #40,D0
- | 03C8 D280 ADD.L D0,D1
- | 03CA 206F 002C MOVEA.L 002C(A7),A0
- | 03CE 6002 BRA.B 03D2
- | 03D0 10D9 MOVE.B (A1)+,(A0)+
- | 03D2 5381 SUBQ.L #1,D1
- | 03D4 64FA BCC.B 03D0
- ; 332:
- ; 333: libbase = (struct MyLibrary *)(newlib+SIZEJMPTAB);
- | 03D6 206D 0032 MOVEA.L 0032(A5),A0
- | 03DA 226F 002C MOVEA.L 002C(A7),A1
- | 03DE D3E8 0036 ADDA.L 0036(A0),A1
- | 03E2 2A49 MOVEA.L A1,A5
- ; 334: libbase->ml_relocs = NULL;
- | 03E4 42AD 002E CLR.L 002E(A5)
- ; 335:
- ; 336: /* perform relocs */
- ; 337: ddata = (long *)((char *)libbase + MYLIBRARYSIZE);
- | 03E8 41ED 0040 LEA 0040(A5),A0
- | 03EC 2F48 0024 MOVE.L A0,0024(A7)
- ; 338: sdata = libbase->ml_origbase->ml_relocs;
- | 03F0 206D 0032 MOVEA.L 0032(A5),A0
- | 03F4 2268 002E MOVEA.L 002E(A0),A1
- | 03F8 2C6F 0018 MOVEA.L 0018(A7),A6
- | 03FC 2F49 0028 MOVE.L A1,0028(A7)
- ; 339: if (sdata)
- | 0400 6738 BEQ.B 043A
- ; 340: {
- ; 341: nrelocs = *sdata++;
- | 0402 206F 0028 MOVEA.L 0028(A7),A0
- | 0406 2E18 MOVE.L (A0)+,D7
- | 0408 2F48 0028 MOVE.L A0,0028(A7)
- | 040C 2C6F 0018 MOVEA.L 0018(A7),A6
- ; 342: while (nrelocs > 0)
- | 0410 4A87 TST.L D7
- | 0412 6F26 BLE.B 043A
- ; 343: {
- ; 344: reloc = (long *)((long)ddata + *sdata++);
- | 0414 202F 0024 MOVE.L 0024(A7),D0
- | 0418 2200 MOVE.L D0,D1
- | 041A 206F 0028 MOVEA.L 0028(A7),A0
- | 041E D298 ADD.L (A0)+,D1
- | 0420 2F41 0020 MOVE.L D1,0020(A7)
- | 0424 2F48 0028 MOVE.L A0,0028(A7)
- ; 345: *reloc += (long)ddata;
- | 0428 202F 0024 MOVE.L 0024(A7),D0
- | 042C 206F 0020 MOVEA.L 0020(A7),A0
- | 0430 D190 ADD.L D0,(A0)
- ; 346: nrelocs--;
- | 0432 5387 SUBQ.L #1,D7
- | 0434 2C6F 0018 MOVEA.L 0018(A7),A6
- ; 347: }
- | 0438 60D6 BRA.B 0410
- ; 348: }
- ; 349:
- ; 350: /* now we need to flush the cache because we copied the jmp table */
- ; 351: if (SysBase->LibNode.lib_Version >= 36)
- | 043A 0C6A 0024 0014 CMPI.W #0024,0014(A2)
- | 0440 2C6F 0018 MOVEA.L 0018(A7),A6
- | 0444 6508 BCS.B 044E
- ; 352: CacheClearU();
- | 0446 2C78 0004 MOVEA.L 0004,A6
- | 044A 4EAE FD84 JSR FD84(A6)
- ; 353:
- ; 354: #ifdef DEVICE
- ; 355: ior->io_Device = (struct Device *)libbase; /* local copy of libary base */
- ; 356: #endif
- ; 357:
- ; 358: if (__libfpinit(libbase) ||
- | 044E 2C4D MOVEA.L A5,A6
- | 0450 6100 FD0E BSR.W 0160
- | 0454 2C6F 0018 MOVEA.L 0018(A7),A6
- | 0458 4A80 TST.L D0
- | 045A 660E BNE.B 046A
- ; 359: #ifdef DEVICE
- ; 360: __UserDevInit(unit, ior, libbase) != 0
- ; 361: #else
- ; 362: __UserLibInit(libbase) != 0
- | 045C 2C4D MOVEA.L A5,A6
- | 045E 6100 0000-XX.1 BSR.W ___UserLibInit
- | 0462 4A80 TST.L D0
- | 0464 2C6F 0018 MOVEA.L 0018(A7),A6
- | 0468 6744 BEQ.B 04AE
- ; 363: #endif
- ; 364: )
- ; 365: {
- ; 366: __libfpterm(libbase);
- | 046A 2C4D MOVEA.L A5,A6
- | 046C 6100 FD1C BSR.W 018A
- ; 367: FreeMem(newlib, (long)(MYLIBRARYSIZE +
- | 0470 41F9 0000 0000-XX LEA _RESLEN,A0
- | 0476 226D 0032 MOVEA.L 0032(A5),A1
- | 047A 2008 MOVE.L A0,D0
- | 047C D0A9 0036 ADD.L 0036(A1),D0
- | 0480 7240 MOVEQ #40,D1
- | 0482 D081 ADD.L D1,D0
- | 0484 2F40 0014 MOVE.L D0,0014(A7)
- ; 368: ((long)&RESLEN) + SIZEJMPTAB));
- | 0488 226F 002C MOVEA.L 002C(A7),A1
- | 048C 202F 0014 MOVE.L 0014(A7),D0
- | 0490 2C78 0004 MOVEA.L 0004,A6
- | 0494 4EAE FF2E JSR FF2E(A6)
- | 0498 2C6F 0018 MOVEA.L 0018(A7),A6
- ; 369: error:
- ; 370: origbase->ml_origbase->ml_Lib.lib_OpenCnt--;
- | 049C 206B 0032 MOVEA.L 0032(A3),A0
- | 04A0 3028 0020 MOVE.W 0020(A0),D0
- | 04A4 5340 SUBQ.W #1,D0
- | 04A6 3140 0020 MOVE.W D0,0020(A0)
- ; 371: return NULL; /* abort if user init failed */
- | 04AA 7000 MOVEQ #00,D0
- | 04AC 6002 BRA.B 04B0
- ; 372: }
- ; 373:
- ; 374: #else
- ; 375: #ifdef DEVICE
- ; 376: if (__UserDevInit(unit, ior, libbase) != 0)
- ; 377: {
- ; 378: libbase->ml_Lib.lib_OpenCnt--;
- ; 379: return NULL;
- ; 380: }
- ; 381: #endif
- ; 382: #endif
- ; 383:
- ; 384: return ( (LONG) libbase );
- | 04AE 200D MOVE.L A5,D0
- ; 385: }
- | 04B0 4CDF 6C80 MOVEM.L (A7)+,D7/A2-A3/A5-A6
- | 04B4 DEFC 001C ADDA.W #001C,A7
- | 04B8 4E75 RTS
- ; 386:
- ; 387: ULONG __asm _LibClose(
- ; 388: #ifdef DEVICE
- ; 389: register __a1 struct IORequest *ior,
- ; 390: #endif
- ; 391: register __a6 struct MyLibrary *libbase )
- | 04BA 514F SUBQ.W #8,A7
- | 04BC 48E7 0116 MOVEM.L D7/A3/A5-A6,-(A7)
- | 04C0 2A4E MOVEA.L A6,A5
- | 04C2 2F4E 0014 MOVE.L A6,0014(A7)
- ; 392: {
- ; 393: ULONG retval = 0;
- | 04C6 7E00 MOVEQ #00,D7
- ; 394:
- ; 395: #ifndef ONE_GLOBAL_SECTION
- ; 396: struct MyLibrary *origbase;
- ; 397:
- ; 398: if (libbase != libbase->ml_origbase)
- | 04C8 206D 0032 MOVEA.L 0032(A5),A0
- | 04CC B1CD CMPA.L A5,A0
- | 04CE 2C6F 0014 MOVEA.L 0014(A7),A6
- | 04D2 6740 BEQ.B 0514
- ; 399: {
- ; 400: #ifdef DEVICE
- ; 401: __UserDevCleanup(ior, libbase);
- ; 402: #else
- ; 403: __UserLibCleanup(libbase);
- | 04D4 2C4D MOVEA.L A5,A6
- | 04D6 6100 0000-XX.1 BSR.W ___UserLibCleanup
- ; 404: #endif
- ; 405: __libfpterm(libbase);
- | 04DA 2C4D MOVEA.L A5,A6
- | 04DC 6100 FCAC BSR.W 018A
- ; 406: origbase = libbase->ml_origbase;
- | 04E0 266D 0032 MOVEA.L 0032(A5),A3
- ; 407: FreeMem((char *)libbase-SIZEJMPTAB,
- | 04E4 206D 0032 MOVEA.L 0032(A5),A0
- | 04E8 224D MOVEA.L A5,A1
- | 04EA 93E8 0036 SUBA.L 0036(A0),A1
- | 04EE 2F49 0010 MOVE.L A1,0010(A7)
- ; 408: (long)(MYLIBRARYSIZE + ((long)&RESLEN)+SIZEJMPTAB));
- | 04F2 41F9 0000 0000-XX LEA _RESLEN,A0
- | 04F8 226D 0032 MOVEA.L 0032(A5),A1
- | 04FC 2008 MOVE.L A0,D0
- | 04FE D0A9 0036 ADD.L 0036(A1),D0
- | 0502 7240 MOVEQ #40,D1
- | 0504 D081 ADD.L D1,D0
- | 0506 226F 0010 MOVEA.L 0010(A7),A1
- | 050A 2C78 0004 MOVEA.L 0004,A6
- | 050E 4EAE FF2E JSR FF2E(A6)
- ; 409: libbase = origbase;
- | 0512 2A4B MOVEA.L A3,A5
- ; 410: }
- ; 411: #else
- ; 412: #ifdef DEVICE
- ; 413: __UserDevCleanup(ior, libbase);
- ; 414: #endif
- ; 415: #endif
- ; 416:
- ; 417: if (( --libbase->ml_Lib.lib_OpenCnt == 0 ) &&
- | 0514 536D 0020 SUBQ.W #1,0020(A5)
- | 0518 2C6F 0014 MOVEA.L 0014(A7),A6
- | 051C 6614 BNE.B 0532
- ; 418: ( libbase->ml_Lib.lib_Flags & LIBF_DELEXP ))
- | 051E 082D 0003 000E BTST #0003,000E(A5)
- | 0524 2C6F 0014 MOVEA.L 0014(A7),A6
- | 0528 6708 BEQ.B 0532
- ; 419: {
- ; 420: /* no more people have me open,
- ; 421: * and I have a delayed expunge pending
- ; 422: */
- ; 423: retval = _LibExpunge( libbase ); /* return segment list */
- | 052A 2C4D MOVEA.L A5,A6
- | 052C 6100 000E BSR.W 053C
- | 0530 2E00 MOVE.L D0,D7
- ; 424: }
- ; 425:
- ; 426: return (retval);
- | 0532 2007 MOVE.L D7,D0
- ; 427: }
- | 0534 4CDF 6880 MOVEM.L (A7)+,D7/A3/A5-A6
- | 0538 504F ADDQ.W #8,A7
- | 053A 4E75 RTS
- ; 428:
- ; 429: ULONG __asm _LibExpunge( register __a6 struct MyLibrary *libbase )
- | 053C 594F SUBQ.W #4,A7
- | 053E 48E7 2316 MOVEM.L D2/D6-D7/A3/A5-A6,-(A7)
- | 0542 2A4E MOVEA.L A6,A5
- | 0544 2F4E 0018 MOVE.L A6,0018(A7)
- ; 430: {
- ; 431: ULONG seglist = 0;
- | 0548 7E00 MOVEQ #00,D7
- ; 432: LONG libsize;
- ; 433: struct Library *PPCLibBase;
- ; 434:
- ; 435: #ifndef ONE_GLOBAL_SECTION
- ; 436: libbase = libbase->ml_origbase;
- | 054A 204D MOVEA.L A5,A0
- | 054C 2A68 0032 MOVEA.L 0032(A0),A5
- ; 437: #endif
- ; 438:
- ; 439: libbase->ml_Lib.lib_Flags |= LIBF_DELEXP;
- | 0550 08ED 0003 000E BSET #0003,000E(A5)
- ; 440: if ( libbase->ml_Lib.lib_OpenCnt == 0 )
- | 0556 4A6D 0020 TST.W 0020(A5)
- | 055A 2C6F 0018 MOVEA.L 0018(A7),A6
- | 055E 6600 0082 BNE.W 05E2
- ; 441: {
- ; 442: /* really expunge: remove libbase and freemem */
- ; 443: #ifndef ONE_GLOBAL_SECTION
- ; 444: if (libbase->ml_relocs)
- | 0562 202D 002E MOVE.L 002E(A5),D0
- | 0566 6718 BEQ.B 0580
- ; 445: FreeMem(libbase->ml_relocs, (*libbase->ml_relocs * 4) + 4);
- | 0568 206D 002E MOVEA.L 002E(A5),A0
- | 056C 2010 MOVE.L (A0),D0
- | 056E 2200 MOVE.L D0,D1
- | 0570 E581 ASL.L #2,D1
- | 0572 5881 ADDQ.L #4,D1
- | 0574 2248 MOVEA.L A0,A1
- | 0576 2001 MOVE.L D1,D0
- | 0578 2C78 0004 MOVEA.L 0004,A6
- | 057C 4EAE FF2E JSR FF2E(A6)
- ; 446: #else
- ; 447: __UserLibCleanup(libbase);
- ; 448: #endif
- ; 449:
- ; 450: if (PPCLibBase = OpenLibrary("ppc.library",0))
- | 0580 43FA FA94 LEA FA94(PC),A1
- | 0584 7000 MOVEQ #00,D0
- | 0586 2C78 0004 MOVEA.L 0004,A6
- | 058A 4EAE FDD8 JSR FDD8(A6)
- | 058E 2640 MOVEA.L D0,A3
- | 0590 2C6F 0018 MOVEA.L 0018(A7),A6
- | 0594 200B MOVE.L A3,D0
- | 0596 6714 BEQ.B 05AC
- ; 451: {
- ; 452: PPCUnLoadObject(libbase->ml_MyObject);
- | 0598 206D 003A MOVEA.L 003A(A5),A0
- | 059C 2C4B MOVEA.L A3,A6
- | 059E 4EAE FFDC JSR FFDC(A6)
- ; 453: CloseLibrary(PPCLibBase);
- | 05A2 224B MOVEA.L A3,A1
- | 05A4 2C78 0004 MOVEA.L 0004,A6
- | 05A8 4EAE FE62 JSR FE62(A6)
- ; 454: }
- ; 455:
- ; 456: seglist = libbase->ml_SegList;
- | 05AC 2E2D 0022 MOVE.L 0022(A5),D7
- ; 457:
- ; 458: Remove( (struct Node *) libbase);
- | 05B0 224D MOVEA.L A5,A1
- | 05B2 2C78 0004 MOVEA.L 0004,A6
- | 05B6 4EAE FF04 JSR FF04(A6)
- ; 459:
- ; 460: libsize = libbase->ml_Lib.lib_NegSize + libbase->ml_Lib.lib_PosSize;
- | 05BA 7000 MOVEQ #00,D0
- | 05BC 302D 0010 MOVE.W 0010(A5),D0
- | 05C0 7200 MOVEQ #00,D1
- | 05C2 322D 0012 MOVE.W 0012(A5),D1
- | 05C6 2400 MOVE.L D0,D2
- | 05C8 D481 ADD.L D1,D2
- | 05CA 2C02 MOVE.L D2,D6
- ; 461: FreeMem( (char *) libbase - libbase->ml_Lib.lib_NegSize,(LONG) libsize );
- | 05CC 204D MOVEA.L A5,A0
- | 05CE 7000 MOVEQ #00,D0
- | 05D0 302D 0010 MOVE.W 0010(A5),D0
- | 05D4 91C0 SUBA.L D0,A0
- | 05D6 2248 MOVEA.L A0,A1
- | 05D8 2006 MOVE.L D6,D0
- | 05DA 2C78 0004 MOVEA.L 0004,A6
- | 05DE 4EAE FF2E JSR FF2E(A6)
- ; 462: }
- ; 463:
- ; 464: /* return NULL or real seglist */
- ; 465: return ( (ULONG) seglist );
- | 05E2 2007 MOVE.L D7,D0
- ; 466: }
- | 05E4 4CDF 68C4 MOVEM.L (A7)+,D2/D6-D7/A3/A5-A6
- | 05E8 584F ADDQ.W #4,A7
- | 05EA 4E75 RTS
-
- SECTION 01 "__MERGED" 00000084 BYTES
-
- SECTION 02 "data" 00000010 BYTES
- 0000 00000040-XX _RESLEN+00000040
- 0004 00000000-XX __LibFuncTab
- OFFSETS 0008 THROUGH 000B CONTAIN ZERO
- 000C 000001B4-00 00.000001B4
-